package pkgLecturaDatos;/** Esta clase pertenece a este paquete **/

/* Importa estos paquetes para la lectura del archivo de texto*/
import java.io.*;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import pkgCalculos.ClsCalculos;
import pkgListaLigada.ClsLista;

/*
 * Descripción: Esta clase realiza la lectura de datos desde el archivo de texto
 * @autor: Karla Cristina Obando Narváez
 * Fecha: 06 de Marzo de 2012 
 * Programa #1
 */
class ClsLeerDatos {
  public static void main(String[] arg) throws FileNotFoundException, IOException{
    File archivo = null;
    FileReader fr = null;
    BufferedReader br = null;

    /*Apertura del fichero y creacion de BufferedReader para poder
     hacer la lectura */
    archivo = new File("archivo.csv");
    fr = new FileReader(archivo);
    br = new BufferedReader(fr);
    String slineaLeida;
    ArrayList<ClsLista> conjuntos = new ArrayList<ClsLista>();
    boolean bprimeraLinea = true; 
    /*Para leer se utiliza el metodo readLine() */
    while ((slineaLeida = br.readLine()) != null) {
      if (slineaLeida.isEmpty()) {
        continue;
      }
        
      /*Lee la primera linea*/
      if (bprimeraLinea) {
          /* Separacion de datos por el simbolo ";"*/
        String[] encabezados = slineaLeida.split(";");
        /*Se definen los titulos de cada conjunto de datos*/
        for (String sencabezado : encabezados) {
          conjuntos.add(new ClsLista(sencabezado));
        }
        bprimeraLinea = false;
        continue;
      }
      String[] slineas = slineaLeida.split(";");
      int i = 0;
      /*Recorre tantos encabezados segun el número de listas*/
      for (String scantidad : slineas) {
        Double ddatoLeido = null;
        try {
          ddatoLeido = Double.parseDouble(scantidad);
        } catch (NumberFormatException e) {
          /* Se captura la excepcion, pero no se informa*/
        }
        /* Inserta el número en la lista del respectivo conjunto de datos*/
        if (ddatoLeido != null) {
          conjuntos.get(i).vMthInsertarAlFinal(ddatoLeido);
        }
        i++;
      }
    }
    /* Se muestran los resultados por cada lista, según el conjunto de datos*/
    for (ClsLista lista : conjuntos) {
    double ddesviacion = ClsCalculos.dMthCalcularDesviacion(lista);
    double dmedia = ClsCalculos.dMthCalcularMedia(lista);
    JOptionPane.showMessageDialog(new JFrame(), " El valor de la Media es : " + dmedia
          + "\n El valor de la Desviación estándar es: " + ddesviacion, lista.sMthObtieneNombre(), JOptionPane.INFORMATION_MESSAGE);
    fr.close();/* Se cierra la lectura del archivo*/
    }
  }
}
